/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package models.Skill;

import java.util.List;
import models.Card.Card;
import models.Deck.Deck;
import models.Game;
import models.Player;

/**
 * 技能
 * @author Invince
 */
//所有的spell似乎都得一一写成类，因为cast函数会不同，触发把函数也做成变量传进去，不过不会
public abstract class Skill {
   /*----------Attributs-------------------*/
    /**
     * 技能名称
     */
    protected String name;
   /*----------Public functions---------------*/
    public abstract boolean cast(List<Player> targets,Player source,Game game);

   /*----------Constructor-------------------*/
    public Skill(String name) {
        this.name = name;
    }

   /*----------Gets and sets-------------------*/
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    /**
     * 对targetL中的玩家加减血
     * @param targetL       作用到的玩家
     * @param deltaBlood    血的变化量
     * @return
     */
    protected static boolean modifBlood(List<Player> targetL, int deltaBloodI){
        return true;
    }

    /**
     * 从fromD牌堆中抽出numberI张牌放入toD牌堆中
     * @param fromD
     * @param toD
     * @param numberI
     * @return
     */
    protected static boolean drawCard(Deck fromD, Deck toD, int numberI){
        return true;
    }

    /**
     * 从fromD中弃掉cardAbandon牌，放入toD中
     * @param fromD
     * @param toD
     * @param cardAbandon
     * @return
     */
    protected static boolean dropCard(Deck fromD, Deck toD, Card cardAbandon){
        return true;
    }

    /**
     * 抵消一个技能的结果
     * @param aSpell
     * @return
     */
    protected static boolean counteract(Skill aSpell){
        return true;
    }
}
